home *** CD-ROM | disk | FTP | other *** search
/ Internet Surfer: Getting Started / Internet Surfer - Getting Started (Wayzata Technology)(7231)(1995).bin / pc / mac / bonus / peter_le / finger-1 / my_units / myteprin.uni < prev    next >
Text File  |  1992-02-24  |  2KB  |  82 lines

  1. unit MyTEPrinting;
  2.  
  3. { This code is part of the Finger/Fingerd source code, written in THINK Pascal 4 }
  4. { Copyright 1991-1992 Peter N Lewis }
  5. { If you use this code, you must give me credit in your about box and documentation }
  6. { This is part of my generic library of routines }
  7.  
  8. interface
  9.  
  10.     uses
  11.         MyPrinting;
  12.  
  13.     type
  14.         TEPObject = object(PObject)
  15.                 te: TEHandle;
  16.                 function CountPages (r: rect): integer;
  17.                 override;
  18.                 procedure DrawPage (r: rect; gp: GrafPtr; pg: integer; first, last: boolean);
  19.                 override;
  20.             end;
  21.  
  22. implementation
  23.  
  24. {$S Printing}
  25.     function GetNextStart (r: rect; startline: integer; te: TEHandle): integer;
  26.         var
  27.             hite, endline: integer;
  28.     begin
  29.         with r do
  30.             hite := bottom - top;
  31.         endline := startline;
  32.         while (endline <= te^^.nLines) & (TEGetHeight(endline, startline, te) < hite) do
  33.             endline := endline + 1;
  34.         GetNextStart := endline;
  35.     end;
  36.  
  37. {$S Printing}
  38.     function TEPObject.CountPages (r: rect): integer;
  39.         var
  40.             count, startline: integer;
  41.     begin
  42.         count := 0;
  43.         startline := 1;
  44.         while startline <= te^^.nLines do begin
  45.             startline := GetnextStart(r, startline, te);
  46.             count := count + 1;
  47.         end;
  48.         CountPages := count;
  49.     end;
  50.  
  51. {$S Printing}
  52.     procedure TEPObject.DrawPage (r: rect; gp: GrafPtr; pg: integer; first, last: boolean);
  53.         var
  54.             startline, endline, i, offset: integer;
  55.             oldport, oldinport: GrafPtr;
  56.             vr, dr: rect;
  57.     begin
  58.         Getport(oldport);
  59.         SetPort(gp);
  60.         oldinport := te^^.inPort;
  61.         te^^.inPort := gp;
  62.         vr := te^^.viewRect;
  63.         dr := te^^.destRect;
  64.         startline := 1;
  65.         for i := 1 to pg - 1 do
  66.             startline := GetNextStart(r, startline, te);
  67.         endline := GetNextStart(r, startline, te) - 1;
  68.         r.bottom := r.top + TEGetHeight(endline, startline, te);
  69.         if startline = 1 then
  70.             offset := 0
  71.         else
  72.             offset := TEGetHeight(startline - 1, 1, te);
  73.         te^^.viewRect := r;
  74.         te^^.destRect.top := te^^.viewRect.top - offset;
  75.         TEUpdate(r, te);
  76.         te^^.viewRect := vr;
  77.         te^^.destRect := dr;
  78.         te^^.inPort := oldinport;
  79.         Setport(oldport);
  80.     end;
  81.  
  82. end.